package top.i89ck.modules.handler;

import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import com.jfinal.core.Controller;
import com.jfinal.kit.HttpKit;
import com.jfinal.kit.PropKit;
import org.opensource.jfhelper.utils.Ret;
import top.i89ck.modules.model.User;
import top.i89ck.modules.utils.Const;
import top.i89ck.modules.utils.Subject;

import javax.servlet.http.HttpServletRequest;

/**
 * 全局过滤器， 用于过滤全局的请求访问信息。 并做出处理
 *
 * @author Seiya
 */
public class LoginInterceptor implements Interceptor {

    public static final int LOGIN_TIME_OUT = -1002;

    private final static String AJAX_REQUEST = "XMLHttpRequest";

    @Override
    public void intercept(Invocation inv) {
        Controller controller = inv.getController();
        User sessionUser = controller.getSessionAttr(Const.SESSION_LOGIN_KEY);
        if (null != sessionUser) {
            Subject.set(sessionUser);
            inv.invoke();
            Subject.remove();
        } else {
            // 判断超时后的请求是通过ajax还是通过普通的url请求过来的
            String requestType = controller.getHeader("X-Requested-With");
            if (AJAX_REQUEST.equals(requestType)) {
                // Ajax请求的数据
                inv.setReturnValue(Ret.fail("登陆超时， 请重新登陆").setCode(LOGIN_TIME_OUT));
            } else {
                // 正常Url请求的数据
                controller.redirect(controller.get("baseUrl") + "admin?code=" + LOGIN_TIME_OUT);
            }
        }
    }


}
